package com.yxh.www.author.api;

import com.yxh.www.author.domain.SmOrganize;
import com.yxh.www.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 授权中心 - 系统组织管理API集
 * </p>
 *
 * @author yangxiaohui
 * @since 2020/5/12
 */
@FeignClient(value = "author-server", contextId = "authorSmOrganize")
public interface AuthorSmOrganizeApi {
    /**
     * 新增系统组织
     *
     * @param organizeName 组织名称
     * @param parentId     上级组织ID
     * @param adminUser    组织管理（负责人）
     * @return 统一响应 {@link Result}
     */
    @PostMapping("/smOrganize/addSmOrganize")
    Result<Object> addSmOrganize(@RequestParam String organizeName,
                                 @RequestParam(defaultValue = "0") String parentId,
                                 @RequestParam String adminUser);

    /**
     * 根据组织ID修改组织信息
     *
     * @param id             组织ID
     * @param organizeStatus 组织状态（0：正常；1：失效）
     * @param adminUser      组织负责人-管理人员-部门主管
     * @return 统一响应 {@link Result}
     */
    @PutMapping("/smOrganize/modifySmOrganize")
    Result<Object> modifySmOrganize(@RequestParam String id,
                                    @RequestParam(required = false) String organizeStatus,
                                    @RequestParam(required = false) String adminUser);

    /**
     * 根据组织ID删除组织
     *
     * @param ids 组织ID集合
     * @return 统一响应 {@link Result}
     */
    @DeleteMapping("/smOrganize/removeSmOrganize")
    Result<Object> removeSmOrganize(@RequestParam String[] ids);

    /**
     * 查询组织列表
     *
     * @param organizeName 组织名称    模糊匹配
     * @param parentId     父组织ID   精准匹配
     * @param adminUser    adminUser 组织负责人-管理人员-部门主管   精准匹配
     * @return 统一响应 {@link Result< List >} 实体 {@link SmOrganize}
     */
    @GetMapping("/smOrganize/listSmOrganize")
    Result<List<SmOrganize>> listSmOrganize(@RequestParam(required = false) String organizeName,
                                      @RequestParam(required = false) String parentId,
                                      @RequestParam(required = false) String adminUser);

    /**
     * 分页查询系统组织列表
     *
     * @param organizeName 组织名称    模糊匹配
     * @param parentId     父组织ID   精准匹配
     * @param adminUser    adminUser 组织负责人-管理人员-部门主管   精准匹配
     * @param pageNum      页码          默认值 1
     * @param pageSize     页面数据长度    默认值 20
     * @return 统一响应 {@link Result}
     */
    @GetMapping("/smOrganize/pageSmOrganize")
    Result<Object> pageSmOrganize(@RequestParam(required = false) String organizeName,
                                  @RequestParam(required = false) String parentId,
                                  @RequestParam(required = false) String adminUser,
                                  @RequestParam(defaultValue = "1") Long pageNum,
                                  @RequestParam(defaultValue = "20") Long pageSize);
}
